cmake_minimum_required(VERSION 3.16)
project(main CXX)

# 1. 定义开关: CMake 缓存里创建了一个 BOOL 型变量，默认值 ON
option(PRINT_SWITCH "print 1 when ON, print 2 when OFF" ON)

# 2. 先创建目标
add_executable(main main.cpp)

# 3. 再给目标加编译宏: 编译期 决定走哪一路代码
if(PRINT_SWITCH)
    target_compile_definitions(main PRIVATE PRINT_SWITCH_ON)
endif()

# 可以通过命令行传参： cmake -B build -DPRINT_SWITCH=OFF

# PUBLIC：本目标需要，依赖这个目标的其他目标也需要。
# INTERFACE：本目标不需要，依赖本目标的其他目标需要。
# PRIVATE：本目标需要，依赖这个目标的其他目标不需要

# CMake 中 PRIVATE、PUBLIC、INTERFACE 的核心作用之一就是解决“幽灵依赖”问题。
# 幽灵依赖（Ghost Dependency） 是指：
# 1、某个目标 间接依赖了某个库，但这个依赖 没有被显式声明；
# 2、导致 下游目标在链接时“莫名其妙”需要某个库，但这个库并没有在它们的 target_link_libraries() 中出现；
# 3、或者 下游目标错误地依赖了它本不该知道的库，造成耦合污染和构建不可预测性。